﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;


namespace _201206QuanLyBanHang.ChucNang
{
    public partial class FormThanhToan : Form
    {

        FormThongbao fthongbao = new FormThongbao();
        private bool ChedoSua = false;
        public double TongTienThanhToan = 0;
        public String TenKhachHangftt = "";
        public double SoTienNo = 0;
        public String StrSoTienNo = "";
        public String MaKH = "";
        public int MaNhanVien = 0;
        double tienmuasp = 0;
        double tienthanhtoan = 0;
        double tiencongnothangtruoc = 0;

        //MinhSQL msql = new MinhSQL();

        SQLCommand msql = new SQLCommand();
        public FormThanhToan()
        {
            InitializeComponent();
        }

        private void FormThanhToan_Load(object sender, EventArgs e)
        {
            //xác nhận độ rộng hiện tại
            this.Width = 470;
            this.Height = 470;

            LabelKhachhang.Text = TenKhachHangftt;
            labelTienno.Text = StrSoTienNo + " đồng";
            txtNgayThanhToan.Text = String.Format("{0:dd/MM/yyyy}", dateNgayThanhtoan.Value);
        }
        private bool KiemTraTruocKhiLuu()
        {
            if (txtSotienThanhtoan.Text == "")
            {
                MessageBox.Show("Ô Tiền thanh toán không được để trống");
                txtSotienThanhtoan.Focus();
                return false;
            }
            //Kiểm tra là số hay không
            if (IsNumber(txtSotienThanhtoan.Text) == false)
            {
                MessageBox.Show("Ô Tiền thanh toán phải là số");
                txtSotienThanhtoan.Focus();
                return false;
            }
            if (int.Parse(txtSotienThanhtoan.Text) <= 0)
            {
                MessageBox.Show("Tiền thanh toán phải lớn hơn 0");
                txtSotienThanhtoan.Focus();
                //txtSoLuong.BackColor = Color.Yellow;
                return false;
            }
            return true;
        }
        private void buttonX1_Click(object sender, EventArgs e)
        {
            txtSotienThanhtoan.Text = txtSotienThanhtoan.Text.Replace(",", "");
            if (KiemTraTruocKhiLuu() == false)
                return;
            KhachHangMuaSP khno = new KhachHangMuaSP();
            khno.MaNV = MaNhanVien;
            khno.MaKH = int.Parse(MaKH);
            khno.NgayThanhToan = Convert.ToDateTime(dateNgayThanhtoan.Value.ToShortDateString());
            khno.NgayMua = khno.NgayThanhToan;
            khno.SoTienThanhToan = Double.Parse(txtSotienThanhtoan.Text);
            khno.Ghichu = rtxtGhichu.Text;

            if (ChedoSua == true)
            {
                ChedoSua = false;
                //Cập nhật
                if (msql.CapNhatThanhToan(khno))
                {
                    //Tính Tổng Tiền Khách Thanh toán theo tháng
                    //Kiểm tra dữ liệu tháng hiện tại đã có trong bảng TONGKHTHANHTOAN hay chưa, nếu chưa thì Insert còn lại Update
                    khno.Thang = dateNgayThanhtoan.Value.Month.ToString();
                    khno.Nam = dateNgayThanhtoan.Value.Year.ToString();
                    khno.ThanhTien = msql.TongTienKH_ThanhToan_theoThang(khno);
                    if (msql.KiemTraTongTienKH_ThanhToan_theoThang(khno) == 0) //=0 là chưa có
                    {
                        //Insert
                        msql.InsertTongTienKH_ThanhToan_theoThang(khno);
                    }
                    else
                    {
                        //Update
                        msql.UpdateTongTienKH_ThanhToan_theoThang(khno);
                    }


                    //Tổng tiền Khách nợ (Công Nợ) = (Tổng Mua SP - Tổng thanh toán) theo tháng
                    //Lấy công nợ của tháng trước
                    if (khno.Thang == "1")
                    {
                        khno.Thangtruoc = "12";
                        khno.Namtruoc = (int.Parse(khno.Nam) - 1).ToString();
                    }
                    else
                    {
                        khno.Thangtruoc = (int.Parse(khno.Thang) - 1).ToString();
                        khno.Namtruoc = khno.Nam;
                    }
                    //Tính tổng tien Công nợ= (TổngMuaSP - TổngThanhToan + TổngCongNoThangtruoc)
                    tienmuasp = 0;
                    tienthanhtoan = 0;
                    tiencongnothangtruoc = 0;
                    if (msql.KiemTraTongTienKH_MuaSP_theoThang(khno) != 0)
                        tienmuasp = msql.TongTienKH_MuaSP_theoThang(khno);
                    if (msql.KiemTraTongTienKH_ThanhToan_theoThang(khno) != 0)
                        tienthanhtoan = msql.TongTienKH_ThanhToan_theoThang(khno);
                    if (msql.KiemTraTongTienKH_CongNo_theoThangtruoc(khno) != 0)
                        tiencongnothangtruoc = msql.TongTienKH_CongNo_theoThangTruoc(khno);
                    khno.ThanhTien = tienmuasp - tienthanhtoan + tiencongnothangtruoc;
                    //Kiểm tra dũ liệu theo tháng hiện tại đã có trong TONGKHCONGNO hay chưa
                    if (msql.KiemTraTongTienKH_CongNo_theoThang(khno) == 0) //==0 là chưa có
                    {
                        //Insert
                        msql.InsertTongTienKH_CongNo_theoThang(khno);
                    }
                    else
                    {
                        //Update
                        msql.UpdateTongTienKH_CongNo_theoThang(khno);
                    }




                    Refresh(sender, e);
                }
                else
                {
                    fthongbao.Thongbao(1, "Cảnh báo", "Cập nhật không thành công");
                    fthongbao.ShowDialog();
                }
                return;
            }


            //Kiểm tra ngày tháng trả
            //Ngày Thanh toán phải bằng ngày trong bảng thanh toán mới nhất hoặc bằng ngày hiện tại
            //nghĩa là NgàyThanhToán <= Ngày hiện tại
            //nhưng NgàyThanhToán >= NgàyThanhToán mới nhất trong bảng
            if (double.Parse(msql.KiemTraNgayThanhToansovoiNgayHientai_khiThanhToan(khno.NgayThanhToan)) >= 0) //= số âm là ngày Thanhtoán lớn hơn Ngày hiện tại
            {

            }
            else
            {
                MessageBox.Show("Ngày thanh toán này không hợp, bạn nên chọn ngày hiện tại để thanh toán", "Cảnh báo", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }

            //Thêm mới
            if (msql.KiemTraThanhToan(khno) == 0) //Insert
            {
                msql.LuuSoTienKhachThanhToan(khno);

                //Tính Tổng Tiền Khách Thanh toán theo tháng
                //Kiểm tra dữ liệu tháng hiện tại đã có trong bảng TONGKHTHANHTOAN hay chưa, nếu chưa thì Insert còn lại Update
                khno.Thang = dateNgayThanhtoan.Value.Month.ToString();
                khno.Nam = dateNgayThanhtoan.Value.Year.ToString();
                khno.ThanhTien = msql.TongTienKH_ThanhToan_theoThang(khno);
                if (msql.KiemTraTongTienKH_ThanhToan_theoThang(khno) == 0) //=0 là chưa có
                {
                    //Insert
                    msql.InsertTongTienKH_ThanhToan_theoThang(khno);
                }
                else
                {
                    //Update
                    msql.UpdateTongTienKH_ThanhToan_theoThang(khno);
                }


                //Tổng tiền Khách nợ (Công Nợ) = (Tổng Mua SP - Tổng thanh toán) theo tháng
                //Lấy công nợ của tháng trước
                if (khno.Thang == "1")
                {
                    khno.Thangtruoc = "12";
                    khno.Namtruoc = (int.Parse(khno.Nam) - 1).ToString();
                }
                else
                {
                    khno.Thangtruoc = (int.Parse(khno.Thang) - 1).ToString();
                    khno.Namtruoc = khno.Nam;
                }
                //Tính tổng tien Công nợ= (TổngMuaSP - TổngThanhToan + TổngCongNoThangtruoc)
                tienmuasp = 0;
                tienthanhtoan = 0;
                tiencongnothangtruoc = 0;
                if (msql.KiemTraTongTienKH_MuaSP_theoThang(khno) != 0)
                    tienmuasp = msql.TongTienKH_MuaSP_theoThang(khno);
                if (msql.KiemTraTongTienKH_ThanhToan_theoThang(khno) != 0)
                    tienthanhtoan = msql.TongTienKH_ThanhToan_theoThang(khno);
                if (msql.KiemTraTongTienKH_CongNo_theoThangtruoc(khno) != 0)
                    tiencongnothangtruoc = msql.TongTienKH_CongNo_theoThangTruoc(khno);
                khno.ThanhTien = tienmuasp - tienthanhtoan + tiencongnothangtruoc;
                //Kiểm tra dũ liệu theo tháng hiện tại đã có trong TONGKHCONGNO hay chưa
                if (msql.KiemTraTongTienKH_CongNo_theoThang(khno) == 0) //==0 là chưa có
                {
                    //Insert
                    msql.InsertTongTienKH_CongNo_theoThang(khno);
                }
                else
                {
                    //Update
                    msql.UpdateTongTienKH_CongNo_theoThang(khno);
                }


            }
            else
            {
                fthongbao.Thongbao(2, "Thông tin", "Hôm nay khách hàng đã thanh toán rồi.\r Hãy chọn chức năng sửa.");
                fthongbao.ShowDialog();
                return;
            }

            Refresh(sender, e);

        }

        private void buttonX2_Click(object sender, EventArgs e)
        {
            dgvNhatKyThanhToan.DataSource = msql.NhatKyTraTien(MaKH);
            timer1.Enabled = true;
            this.Width = 470;

            //Kiểm tra nếu ko còn dữ liệu thì Button Edit and Delete là Enabled=false
            if (dgvNhatKyThanhToan.RowCount > 0)
            {
                btnSua.Enabled = true;
                btnXoa.Enabled = true;
            }
            else
            {
                btnSua.Enabled = false;
                btnXoa.Enabled = false;
            }

        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            this.Width += 20;
            if (this.Width > 920)
                timer1.Enabled = false;

        }
        public bool IsNumber(string pValue)
        {
            foreach (Char c in pValue)
            {
                if (!Char.IsDigit(c))
                    return false;
            }
            return true;
        }

        private void btnSua_Click(object sender, EventArgs e)
        {
            ChedoSua = true;
            String ngay, sotien, ghichu;
            ngay = dgvNhatKyThanhToan.CurrentRow.Cells["NgayThanhToan"].Value.ToString();
            String[] Strngay = ngay.Split('/');
            ngay = Strngay[1] + "/" + Strngay[0] + "/" + Strngay[2];
            dateNgayThanhtoan.Text = ngay;
            sotien = dgvNhatKyThanhToan.CurrentRow.Cells["SoTienThanhToan"].Value.ToString();
            //sotien = sotien.Replace(",", ""); sotien = sotien.Replace(".", "");
            txtSotienThanhtoan.Text = sotien;
            ghichu = dgvNhatKyThanhToan.CurrentRow.Cells["ghichuKHTT"].Value.ToString();
            rtxtGhichu.Text = ghichu;

            //Enabled
            dateNgayThanhtoan.Enabled = false;
        }

        private void btnXoa_Click(object sender, EventArgs e)
        {
            String ngay;
            ngay = dgvNhatKyThanhToan.CurrentRow.Cells["NgayThanhToan"].Value.ToString();
            String[] Strngay = ngay.Split('/');
            ngay = Strngay[1] + "/" + Strngay[0] + "/" + Strngay[2];

            //Hỏi việc Xóa
            fthongbao.ThongbaoXoa(2, "Thông báo", "Bạn có muốn xóa không?");
            fthongbao.ShowDialog();
            if (fthongbao.btnchapnhan == 2)
                return; //Dừng ko xóa

            //Xóa
            msql.XoaNgayThanhToan(MaKH, ngay);
            Refresh(sender, e);
        }
        private void Refresh(object sender, EventArgs e)
        {
            //Thông tin về ThemXoaSua
            FormThongTin ftt = new FormThongTin();
            ftt.ShowDialog();

            double TienNo = 0;
            if (msql.TrangThaiKH_Thanhtoan(MaKH) == 0) //=0 là ko có trong bảng gán mặc định =0
            {
                TienNo = 0;
            }
            else
            {
                TienNo = msql.TongTienKH_ThanhToan(MaKH);
            }
            TienNo = msql.TongTienKH_MuaSP(MaKH) - TienNo;
            labelTienno.Text = msql.ChuyenSangTien(TienNo) + " đồng";
            //Về giá trị ban đầu
            txtSotienThanhtoan.Text = "0";
            rtxtGhichu.Text = "";
            //Đưa về ngày ban đầu (ngày hiện tại)
            dateNgayThanhtoan.Enabled = true;
            dateNgayThanhtoan.Text = DateTime.Today.Month.ToString() + "/" + DateTime.Today.Day.ToString() + "/" + DateTime.Today.Year.ToString();
            buttonX2_Click(sender, e);

            //Kiểm tra nếu ko còn dữ liệu thì Button Edit and Delete là Enabled=false
            if (dgvNhatKyThanhToan.RowCount > 0)
            {
                btnSua.Enabled = true;
                btnXoa.Enabled = true;
            }
            else
            {
                btnSua.Enabled = false;
                btnXoa.Enabled = false;
            }
        }

        private void txtSotienThanhtoan_Click(object sender, EventArgs e)
        {
            txtSotienThanhtoan.SelectAll();
        }

        private void txtSotienThanhtoan_KeyUp(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Back)
            {
                //Ko làm gì cả chỉ mặc định là xóa
            }
            else
            {
                txtSotienThanhtoan.Text = txtSotienThanhtoan.Text.Replace(",", "");
                int cd = txtSotienThanhtoan.TextLength;
                if (cd > 3 && cd <= 6)
                {
                    txtSotienThanhtoan.Text = txtSotienThanhtoan.Text.Insert(cd - 3, ",");
                }
                if (cd > 6 && cd <= 9)
                {
                    txtSotienThanhtoan.Text = txtSotienThanhtoan.Text.Insert(cd - 3, ",");
                    txtSotienThanhtoan.Text = txtSotienThanhtoan.Text.Insert(cd - 6, ",");
                }
                if (cd > 9 && cd <= 12)
                {
                    txtSotienThanhtoan.Text = txtSotienThanhtoan.Text.Insert(cd - 3, ",");
                    txtSotienThanhtoan.Text = txtSotienThanhtoan.Text.Insert(cd - 6, ",");
                    txtSotienThanhtoan.Text = txtSotienThanhtoan.Text.Insert(cd - 9, ",");
                }
                txtSotienThanhtoan.SelectionStart = txtSotienThanhtoan.TextLength;
            }
        }

        private void button_Thoat_Click(object sender, EventArgs e)
        {
            this.Close();

        }

        private void pnlBanHang_Click(object sender, EventArgs e)
        {

        }

        private void dateNgayThanhtoan_ValueChanged(object sender, EventArgs e)
        {
            txtNgayThanhToan.Text = String.Format("{0:dd/MM/yyyy}", dateNgayThanhtoan.Value);
        }

       
    }
}
